<script>
	import Vue from 'vue';
	import {
		Base64
	} from 'js-base64'
	import config from '@/tools/config.js';
	import {
		mapState
	} from 'vuex';
	import wsRequest from '@/tools/websoket.js'
	export default {
		data() {
			return {
				timedTask: null, // 定时任务
				configInfo: {}, // 后台配置信息
				maintenanceUrserInfo: {}, // 最近一次维保人员的信息
				times: null,
				websocket: null
			};
		},
		// 冷启动
		onLaunch() {
			this.getPhoneType(); // 获取机型
			this.getSystemInfo(); // 导航栏的高度计算
		},
		// 热启动
		onShow() {
			this.upateApp(); // 检测小程序版本是否需要更新
			// this.getLocationInfo() // 获取地理位置信息
		},
		computed: {
			// 用户角色状态
			...mapState({
				roleStatus: modules => modules.infoList.roleStatus,
				isUserState: modules => modules.infoList.isUserState
			})
		},
		methods: {
			// 打开websocket
			openWebsocket() {
				let params = ''; // 要传的数据
				let encryptionStr = Base64.encode(uni.getStorageSync('token')); // base64转化的token
				this.websocket = new wsRequest(
					`wss://fire-api.javadoge.com/orgStaffCertificateWebSocket/${encryptionStr}`, 5000, params);
				// console.log('打开websocket', this.websocket)
				this.websocket.getMessage(res => {
					// console.log('后端返回的数据---', JSON.parse(res.data));
					if (JSON.parse(res.data).operatorFlag) {
						this.closeWebsocket() // 关闭websocket
					}
				})
			},
			// 关闭websocket
			closeWebsocket() {
				// console.log('关闭websocket', this.websocket.socketTask)
				this.websocket.socketTask.close() // 关闭websocket
			},
			// 计算时间差
			diffTime(start) {
				let staytimeGap = new Date().getTime() - new Date(start).getTime();
				let stayHour = Math.floor(staytimeGap / (3600 * 1000)); // 小时
				let leave1 = staytimeGap % (3600 * 1000);
				let stayMin = Math.floor(staytimeGap / (60 * 1000)); // 分钟
				let leave2 = leave1 % (60 * 1000);
				let staySec = Math.floor(leave2 / 1000); // 秒
				return stayMin
			},
			// 判断机型
			getPhoneType() {
				uni.getSystemInfo({
					success: function(res) {
						// console.log('判断机型----', res);
						if (res.osName == 'ios') {
							uni.setStorageSync('qualityNum', 0.01)
						} else if (res.osName == 'android') {
							uni.setStorageSync('qualityNum', 0.95)
						}
					}
				});
			},
			// 导航栏的高度计算
			getSystemInfo() {
				uni.getSystemInfo({
					success: function(e) {
						Vue.prototype.statusBar = e.statusBarHeight; // 状态栏高度
						// #ifndef MP
						if (e.platform == 'android') {
							Vue.prototype.customBar = e.statusBarHeight + 50;
						} else {
							Vue.prototype.customBar = e.statusBarHeight + 45;
						}
						// #endif

						// #ifdef MP-WEIXIN
						let customWEIXIN = uni.getMenuButtonBoundingClientRect(); // 微信导航栏的信息
						Vue.prototype.customBar = customWEIXIN.bottom + customWEIXIN.top - e
							.statusBarHeight;
						// #endif
					}
				});
			},
			// 检测小程序更新版本
			upateApp() {
				// 获取小程序更新机制兼容
				if (uni.canIUse('getUpdateManager')) {
					const updateManager = uni.getUpdateManager();
					// 检查是否有新版本发布
					updateManager.onCheckForUpdate(res => {
						if (res.hasUpdate) {
							//小程序有新版本，则静默下载新版本，做好更新准备
							updateManager.onUpdateReady(() => {
								uni.showModal({
									title: '更新提示',
									confirmColor: '#3178FF',
									cancelColor: '#606266',
									content: '新版本已经准备好，是否重启应用？',
									success: item => {
										if (item.confirm) {
											//新的版本已经下载好，调用 applyUpdate 应用新版本并重启
											updateManager.applyUpdate();
										} else if (item.cancel) {
											//如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
											uni.showModal({
												title: '温馨提示',
												confirmColor: '#3178FF',
												content: '我们已经做了新的优化，请及时更新哦~',
												showCancel: true, //隐藏取消按钮，也可显示，取消会走res.cancel，然后从新开始提示
												success: res => {
													//第二次提示后，强制更新
													if (res
														.confirm) {
														// 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
														updateManager
															.applyUpdate();
													} else if (res
														.cancel) {
														//重新回到版本更新提示
													}
												}
											});
										}
									}
								});
							});
							// 新的版本下载失败
							updateManager.onUpdateFailed(() => {
								uni.showModal({
									title: '温馨提示',
									confirmColor: '#3178FF',
									cancelColor: '#606266',
									content: '新版本已经上线，请您删除当前小程序，重新搜索打开'
								});
							});
						}
					});
				} else {
					// 提示用户在最新版本的客户端上体验
					uni.showModal({
						title: '温馨提示',
						confirmColor: '#3178FF',
						cancelColor: '#606266',
						content: '当前微信版本过低，可能无法使用该功能，请升级到最新版本后重试。'
					});
				}
			},
			// 获取后台配置信息
			getConfigCenter() {
				let that = this;
				uni.request({
					url: config.baseUrl + '/sys/user/configCenter',
					method: 'GET',
					header: {
						'Content-Type': 'application/json', // 默认值
						Authorization: uni.getStorageSync('token')
					}
				}).then(res => {
					// console.log('后台配置信息----', res[1].data);
					let datas = res[1].data;
					if (datas.code == 200 && datas.success) {
						that.configInfo = datas.data;
						uni.setStorageSync('configInfo', datas.data); // 获取后台配置信息保存到本地缓存
						that.getUserInfo(); // 获取最近一次的维保人员信息
					} else {
						that.$showModal('温馨提示', datas.msg);
					}
				});
			},
			// 获取当前时间--格式化
			getTime() {
				var date = new Date();
				var sign2 = ":";
				var year = date.getFullYear() // 年
				var month = date.getMonth() + 1; // 月
				var day = date.getDate(); // 日
				var hour = date.getHours(); // 时
				var minutes = date.getMinutes(); // 分
				var seconds = date.getSeconds() //秒
				var weekArr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天'];
				var week = weekArr[date.getDay()];
				// 给一位数的数据前面加 “0”
				if (month >= 1 && month <= 9) {
					month = "0" + month;
				}
				if (day >= 0 && day <= 9) {
					day = "0" + day;
				}
				if (hour >= 0 && hour <= 9) {
					hour = "0" + hour;
				}
				if (minutes >= 0 && minutes <= 9) {
					minutes = "0" + minutes;
				}
				if (seconds >= 0 && seconds <= 9) {
					seconds = "0" + seconds;
				}
				return year + "-" + month + "-" + day + " " + hour + sign2 + minutes + sign2 + seconds;
			},
			// 实时获取地理位置信息
			getLocationInfo() {
				let that = this
				uni.startLocationUpdateBackground({
					success: res => console.log('开启小程序接收位置消息成功'),
					fail: err => console.error('开启小程序接收位置消息失败：', err),
					complete: msg => console.log('调用开启小程序接收位置消息 API 完成')
				});
				uni.startLocationUpdate({
					success: res => {
						uni.onLocationChange(function(res2) {
							console.log('地理位置信息', res2)
							console.log('当前时间----', that.getTime())
							console.log('经纬度：', res2.longitude, res2.latitude);
						});
					},
					fail: err => console.error('开启小程序接收位置消息失败：', err),
					complete: msg => console.log('调用开启小程序接收位置消息 API 完成')
				})
			},
			// 获取最新一次维保人员的信息
			getUserInfo() {
				let that = this;
				uni.request({
					url: config.baseUrl + '/maintenance/getUserCurrentPractice/' + uni
						.getStorageSync(
							'userInfo')
						.id,
					method: 'POST',
					header: {
						'Content-Type': 'application/json', // 默认值
						Authorization: uni.getStorageSync('token')
					}
				}).then(res => {
					// console.log('最新一次维保信息--------', res[1].data);
					let datas = res[1].data;
					if (datas.code == 200 && datas.data) {
						that.maintenanceUrserInfo = datas.data;
						if (that.maintenanceUrserInfo.status == 1 && that.configInfo.ifSendGps ==
							1) {
							// console.log('开启定时器了------------')
							that.uploadLatLong(); // 开启定时器
						} else {
							// console.log('关闭定时器了------------')
							that.closeScheduledTask(); // 关闭定时器
						}
					} else {
						that.closeScheduledTask(); // 关闭定时器
					}
				});
			},
			// 开启定时任务----持续上传经纬度
			uploadLatLong() {
				let that = this;
				// 持续上传经纬度，虚拟定位
				that.timedTask = setInterval(() => {
					uni.getLocation({
						type: 'gcj02',
						success: function(res) {
							// console.log('当前坐标点------', res);
							let infoLocation = {
								gpsType: 1,
								latitude: res.latitude,
								longitude: res.longitude,
								maintenanceId: that.maintenanceUrserInfo
									.maintenanceId,
								phone: that.maintenanceUrserInfo.phone,
								projectId: that.maintenanceUrserInfo.projectId,
								projectName: that.maintenanceUrserInfo.projectName,
								userId: that.maintenanceUrserInfo.userId,
								username: that.maintenanceUrserInfo.username,
								sendTime: that.$check.getTime()
							};
							// console.log('上传给后台的数据------', infoLocation);
							if (infoLocation) {
								uni.request({
									url: `${config.longLatUrl}/position/maintenanceRecord`,
									data: infoLocation,
									method: 'POST',
									header: {
										'content-type': 'application/json;charset=UTF-8'
									},
									timeout: config.reqTimeOut
								}).then(res => {
									// console.log('经纬度持续上传-------', res);
								});
							}
						}
					});
				}, that.configInfo.sendGpsPeriod);
			},
			// 关闭定时任务----持续上传经纬度
			closeScheduledTask() {
				for (let i = 0; i <= this.timedTask; i++) {
					// 关闭页面所有的定时器
					clearInterval(i);
				}
			}
		}
	};
</script>

<style lang="scss">
	/* 注意要写在第一行，同时给style标签加入lang="scss"属性 */
	@import 'uview-ui/index.scss';
	// 引入公共css
	@import '@/static/css/common.css';
	// 引入animate.css动画
	@import './static/css/animate.min.css';

	.uni-modal {
		.uni-modal__bd {
			color: blue !important;
			font-size: 32rpx;
			font-weight: bold;
			padding: 64rpx 0;
		}
	}

	page {
		line-height: 1;
		font-family: 'Helvetica Neue', Helvetica, Tahoma, Arial, 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif;
		-webkit-text-size-adjust: none;
		font-size: 28rpx;
		color: #333;
		background-color: #f5f5f5;
		letter-spacing: 0.3rpx;
		padding-bottom: constant(safe-area-inset-bottom);
		padding-bottom: env(safe-area-inset-bottom);
	}

	* {
		margin: 0;
		padding: 0;
		box-sizing: border-box;
	}

	/deep/.u-btn--primary {
		background-color: #3178ff !important;
		border-color: #3178ff !important;
	}

	.u-dropdown__content__mask {
		display: none !important;
	}

	.u-size-default {
		height: 100rpx !important;
		line-height: 100rpx !important;
	}

	/deep/.u-toast {
		padding: 20rpx !important;
		line-height: 1.3;
	}

	/deep/.u-line-1 {
		// font-size: 24rpx;
	}

	/deep/.u-radio__icon-wrap--disabled {
		// background-color: #2979ff !important;
	}

	/deep/.u-mode-light-primary {
		line-height: 1.3 !important;
	}
</style>